package com.atguigu.gulimall.gateway.config;

import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;

import com.alibaba.fastjson.JSON;
import com.atguigu.common.exception.BizCodeEnum;
import com.atguigu.common.utils.R;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Configuration
public class SentinelGatewayConfig {

    //TODO 响应式编程
    //自定义网关的回调
        public SentinelGatewayConfig(){
            GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {
                //如果网关限流了请求，就会调用此回调
                @Override
                public Mono<ServerResponse> handleRequest(ServerWebExchange exchange, Throwable t) {
                    R error = R.error(BizCodeEnum.TOO_MANY_REQUEST.getCode(), BizCodeEnum.TOO_MANY_REQUEST.getMsg());
                    String errJson = JSON.toJSONString(error);

                    Mono<ServerResponse> body = ServerResponse.ok().body(Mono.just(errJson), String.class);
                    return body;
                }
            });
        }
}
